package com.learn.security.web.filter;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import java.io.IOException;
import java.util.Date;

/**
 * 自定义过滤器
 * 1. 通过@Component将TimeFilter添加到容器
 * 2. 第三方过滤器通过config来添加（这里注释//@Component来模拟）见com.learn.security.config.FilterConfig
 * 两种方式区别：
 *          方式@Component：  不能配置选择过滤的url
 *          方式@Configuration：能配置选择过滤的url
 *
 * filter的优点：  可以获取HTTP相关信息（如request。。）    （与aspect对比）
 * filter的缺点：  不能获取拦截的类和方法等信息             （与Interceptor和aspect对比）
 *                 不能获取别拦截方法的参数                 （与aspect对比）
 */
//@Component
public class TimeFilter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("TimeFilter init");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//        System.out.println("TimeFilter start");
        // 开始时间
        long start = new Date().getTime();
        // 过滤的实际业务
        chain.doFilter(request,response);
        // 结束时间
        long end = new Date().getTime();
//        System.out.println("过滤用时：" + (end - start));
//        System.out.println("TimeFilter start");
    }

    @Override
    public void destroy() {
        System.out.println("TimeFilter destroy");
    }
}
